#ifndef GAME_HPP
#define GAME_HPP

/**
  * @file Game.hpp
  * @author Ryan Van Why
  * @brief Each game should subclass this class.
  */

// SFML
#include <SFML/Window.hpp> // For the sf::Event type

namespace mindsweeper {
namespace main {

class Game {
	public:
		/**
		  * @brief This is called once each time a game is started.
		  * This may be called multiple times in each execution of the program.
		  * The default implementation does nothing.
		  */
		virtual void init();

		/**
		  * @brief Process a new event.
		  * @param event The event to be processed.
		  * This will be called some number of times (possibly 0) each cycle prior to update() being called.
		  * The event should be ignored if it's not a type the game cares about.
		  */
		virtual void processEvent(sf::Event &event);

		/**
		  * @brief This updates this game's logic.
		  */
		virtual void update() = 0;

		/**
		  * @brief This renders this game
		  */
		virtual void render() = 0;
};

// End namespaces
}
}

#endif // GAME_HPP
